package cn.rumoss.nettytest.echo;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;

public class EchoServerHandler extends ChannelHandlerAdapter{
  
  /**
   * 每当从客户端收到新的数据时,这个方法会在收到消息时被调用
   */
  @Override
  public void channelRead(ChannelHandlerContext ctx,Object msg) throws Exception{
    
    // 一个引用计数对象,这个对象必须显示地调用release()方法来释放
    ByteBuf buf = (ByteBuf)msg;
    System.out.println("服务端收到： " + buf.toString() + "准备发回去啦~");
    
    ctx.write(buf);// 缓冲在了内部
    ctx.flush();
    // ReferenceCountUtil.release(buf);
    // 我们并没有释放接受到的消息，这是因为当写入的时候Netty已经帮我们释放了
    
  }
  
  @Override
  public void exceptionCaught(ChannelHandlerContext ctx,Throwable cause) throws Exception{
    
    // 当异常发生的时候关闭连接
    cause.printStackTrace();
    ctx.close();
    
  }
  
}
